Numerik

Ingenieurinformatik Teil 2, Sommersemester 2026

David Straub

Numerik – D. Straub

Gliederung

  1. Einführung in Matlab
  2. Arbeiten mit Arrays
  3. Funktionen und Kontrollstrukturen
  4. Analysis
  5. Lineare Algebra
  6. Differentialgleichungen 👈
  7. Einführung in Simulink
Numerik – D. Straub

Fahrplan: Differentialgleichungen

Einheit 1
→ Motivation und Herleitung am Ingenieurbeispiel
→ Begriffe: Ordnung, Anfangswertproblem
→ Analytische vs. numerische Lösung
→ Euler'sches Polygonzugverfahren in Matlab

Einheit 2 – Heute
→ Standardform für numerische Verfahren
→ Numerische Lösungsverfahren
→ Lösung in Matlab

Einheit 3
→ Anwendungen

Numerik – D. Straub

Standardform

Numerik – D. Straub

Rückblick: Was kann das Euler-Verfahren?

Aus Einheit 1: Das Euler-Verfahren löst DGLn der Form

z˙=f(t,z),z(t0)=z0\dot{z} = f(t,\, z), \qquad z(t_0) = z_0

Schrittweise Approximation mit Schrittweite hh:

zi+1=zi+hf(ti,zi)z_{i+1} = z_i + h \cdot f(t_i,\, z_i)

Konkret – die Batterie-DGL: f(t,T)=Pλ(TT)Cth\quad f(t, T) = \dfrac{P - \lambda\,(T - T_\infty)}{C_\text{th}}

Frage: Was passiert, wenn wir mehrere gekoppelte DGLn haben – oder eine DGL höherer Ordnung?

Numerik – D. Straub

Erweiterung 1: Gekoppelte DGLn 1. Ordnung

Zwei Zellen in einem Modul, thermisch gekoppelt (μ\mu = Kopplung zwischen den Zellen):

CthT˙1=P1λ(T1T)μ(T1T2)C_\text{th}\,\dot{T}_1 = P_1 - \lambda(T_1 - T_\infty) - \mu(T_1 - T_2)

CthT˙2=P2λ(T2T)μ(T2T1)C_\text{th}\,\dot{T}_2 = P_2 - \lambda(T_2 - T_\infty) - \mu(T_2 - T_1)

Beide DGLn sind 1. Ordnung, aber gekoppeltT˙1\dot{T}_1 hängt von T2T_2 ab und umgekehrt.

Als Vektor geschrieben hat das genau die gleiche Form wie vorher:

z˙=f(t,z),z=(T1T2)\dot{\boldsymbol{z}} = f(t,\, \boldsymbol{z}), \qquad \boldsymbol{z} = \begin{pmatrix}T_1\\T_2\end{pmatrix}

Das Euler-Verfahren funktioniert unverändert – nur mit Vektoren statt Skalaren.

Numerik – D. Straub

Die Standardform

Das Euler-Verfahren (und alle anderen Löser) arbeiten mit der Standardform:

z˙=f(t,z),z(t0)=z0\boxed{\dot{\boldsymbol{z}} = f(t,\, \boldsymbol{z}), \qquad \boldsymbol{z}(t_0) = \boldsymbol{z}_0}

  • z(t)Rn\boldsymbol{z}(t) \in \mathbb{R}^n: Zustandsvektor
  • ff: vektorwertige Funktion der Zeit und des Zustands
  • Skalarer Fall (n=1n=1): die bekannte Form aus Einheit 1

Offene Frage: Was ist mit DGLn höherer Ordnung – z. B. Schwingungsgleichungen?

Numerik – D. Straub

Erweiterung 2: DGL 2. Ordnung → Standardform

Eine DGL 2. Ordnung enthält x¨\ddot{x} – das passt nicht direkt in die Standardform.

Beispiel – Schwingungsgleichung: mx¨+kx=0\quad m\ddot{x} + kx = 0

Idee: Neue Variable v:=x˙v := \dot{x} einführen, dann gilt v˙=x¨\dot{v} = \ddot{x}.

Die eine DGL 2. Ordnung wird zu zwei DGLn 1. Ordnung:

x˙=v,v˙=kmx\dot{x} = v, \qquad \dot{v} = -\frac{k}{m}\,x

In Vektorschreibweise – jetzt wieder Standardform!

z˙=(vkmx)=f(t,z),z=(xv)\dot{\boldsymbol{z}} = \underbrace{\begin{pmatrix}v\\-\dfrac{k}{m}\,x\end{pmatrix}}_{=f(t,\,\boldsymbol{z})}, \qquad \boldsymbol{z} = \begin{pmatrix}x\\v\end{pmatrix}

Numerik – D. Straub

Standardform: Vorgehensweise

Wie viele Komponenten hat z\boldsymbol{z}?
→ Gleich der Ordnung der DGL.

Vorgehen:

  1. DGL nach der höchsten Ableitung auflösen: x¨=\ddot{x} = \ldots
  2. Neue Variablen einführen:
    z1:=x,z2:=x˙z_1 := x, \quad z_2 := \dot{x}
  3. System aufschreiben:
    z˙1=z2,z˙2=\dot{z}_1 = z_2, \quad \dot{z}_2 = \ldots
  4. Anfangsbedingungen als Vektor:
    z0=(x(0)x˙(0))\boldsymbol{z}_0 = \begin{pmatrix}x(0)\\\dot{x}(0)\end{pmatrix}
Numerik – D. Straub

✍️ Aufgabe: Standardform

Schreiben Sie die folgende DGL in ein System von DGLn 1. Ordnung um.
Geben Sie auch die Anfangsbedingungen als Vektor z0\boldsymbol{z}_0 an.

Gedämpfte Schwingung mit äußerer Anregung:

mx¨+dx˙+kx=F0cos(ωt),x(0)=0,x˙(0)=v0m\ddot{x} + d\,\dot{x} + k\,x = F_0\cos(\omega t), \qquad x(0) = 0,\quad \dot{x}(0) = v_0

Wie viele Komponenten hat z\boldsymbol{z}?

Numerik – D. Straub

Numerische Lösungsverfahren

Numerik – D. Straub

Euler-Verfahren: Einfluss der Schrittweite

Wir haben das Euler-Verfahren bereits kennengelernt – aber wie gut funktioniert es wirklich?

Testfall: Federschwinger ohne Dämpfung

x¨+x=0z˙=(vx),z0=(10)\ddot{x} + x = 0 \quad \Rightarrow \quad \dot{\boldsymbol{z}} = \begin{pmatrix}v \\ -x\end{pmatrix}, \quad \boldsymbol{z}_0 = \begin{pmatrix}1\\0\end{pmatrix}

Exakte Lösung: x(t)=cos(t)x(t) = \cos(t) – eine gleichmäßige Schwingung, keine wachsende Amplitude.

Frage: Was passiert, wenn wir die Schrittweite hh variieren?

Numerik – D. Straub

Euler-Verfahren: Grenzen – Live-Demo

f = @(t, z) [z(2); -z(1)];   % Federschwinger: z = [x; v]
dt = 0.001;
t = 0:dt:30;
z = zeros(2, length(t));
z(:,1) = [1; 0];              % x(0)=1, v(0)=0
for i = 1:length(t)-1
    z(:,i+1) = z(:,i) + dt * f(t(i), z(:,i));
end
plot(t, z(1,:), t, cos(t), '--')
legend('Euler', 'Exakt'),  grid on
Numerik – D. Straub

Euler-Verfahren: Fazit

  • Kleine Schrittweite → genaue Lösung, aber langsam
  • Große Schrittweite → Lösung wächst oder explodiert
  • Beim Federschwinger wird Energie künstlich erzeugt – physikalisch falsch

→ Wir brauchen ein Verfahren, das genauer ist bei gleicher Schrittweite.

Numerik – D. Straub

Von Euler zu Runge-Kutta

Euler nutzt nur die Steigung am Anfang des Intervalls:

k1=f(ti,zi),zi+1=zi+dtk1k_1 = f(t_i, z_i), \qquad z_{i+1} = z_i + dt \cdot k_1

→ Analogie: Rechteckregel aus der Numerischen Integration.

Modifiziertes Euler-Verfahren: Erst einen halben Schritt, Steigung dort auswerten, dann ganzen Schritt:

k1=f(ti,zi),k2=f ⁣(ti+dt2,  zi+dt2k1)k_1 = f(t_i, z_i), \quad k_2 = f\!\left(t_i+\tfrac{dt}{2},\; z_i + \tfrac{dt}{2}\,k_1\right)

zi+1=zi+dtk2z_{i+1} = z_i + dt \cdot k_2

→ Analogie: Mittelpunktregel. Genauer als Euler, weil die Steigung in der Mitte repräsentativer ist.

Numerik – D. Straub

RK3 und die Simpsonregel

RK3: Steigung am Anfang, in der Mitte und am Ende:

k1=f(ti,zi),k2=f ⁣(ti+dt2,  zi+dt2k1),k3=f(ti+dt,  zi+dtk2)k_1 = f(t_i, z_i), \quad k_2 = f\!\left(t_i+\tfrac{dt}{2},\; z_i+\tfrac{dt}{2}k_1\right), \quad k_3 = f(t_i+dt,\; z_i+dt\,k_2)

zi+1=zi+dt6(k1+4k2+k3)z_{i+1} = z_i + \frac{dt}{6}(k_1 + 4k_2 + k_3)

→ Gewichte 16,46,16\frac{1}{6}, \frac{4}{6}, \frac{1}{6} – das ist die Simpsonregel (Analysis II / Keplersche Fassregel), angewendet auf die Steigungsfunktion ff.

Numerik – D. Straub

RK4: Noch besser

RK4: Die Mitte wird zweimal ausgewertet – k3k_3 verbessert die Schätzung von k2k_2:

k1=f(ti,  zi)k_1 = f(t_i,\; z_i)

k2=f ⁣(ti+dt2,  zi+dt2k1)k_2 = f\!\left(t_i+\tfrac{dt}{2},\; z_i + \tfrac{dt}{2}\,k_1\right)

k3=f ⁣(ti+dt2,  zi+dt2k2)k_3 = f\!\left(t_i+\tfrac{dt}{2},\; z_i + \tfrac{dt}{2}\,k_2\right)

k4=f ⁣(ti+dt,  zi+dtk3)k_4 = f\!\left(t_i+dt,\; z_i + dt\,k_3\right)

zi+1=zi+dt6(k1+2k2+2k3+k4)z_{i+1} = z_i + \frac{dt}{6}(\,k_1 + 2k_2 + 2k_3 + k_4\,)

Numerik – D. Straub

Euler als wiederverwendbare Funktion

Unser Euler-Code:

f  = @(t, z) [z(2); -z(1)];
dt = 0.01;
t  = 0:dt:20;
z  = zeros(2, length(t));
z(:,1) = [1; 0];
for i = 1:length(t)-1
    z(:,i+1) = z(:,i) + dt * f(t(i), z(:,i));
end

Dieser Code braucht nur drei Dinge: die DGL f, den Zeitbereich und die Anfangsbedingung.

→ Das Verfahren selbst lässt sich als Funktion kapseln:

Numerik – D. Straub

Euler als Funktion

function [t, z] = ode_euler(f, tspan, z0, dt)
    t = tspan(1):dt:tspan(2);
    z = zeros(length(z0), length(t));  % funktioniert für 1D und nD
    z(:,1) = z0;
    for i = 1:length(t)-1
        z(:,i+1) = z(:,i) + dt * f(t(i), z(:,i));
    end
end
  • tspan ist der Zeitbereich [t0, tend]
  • f ist ein Function-Handle
Numerik – D. Straub

ode45 in MATLAB

MATLAB löst DGLn in Standardform mit ode45 – der Name steht für Runge-Kutta der Ordnung 4/5:

  • Zwei Verfahren (RK4 und RK5) laufen parallel – die Differenz schätzt den Fehler
  • ode45 passt dtdt automatisch an
[t, y] = ode45(f, tspan, z0)
Argument Bedeutung Beispiel
f Function-Handle für f(t,z)f(t, \boldsymbol{z}) @(t,z) [z(2); -z(1)]
tspan Zeitbereich [t0, tend] [0, 20]
z0 Anfangsbedingung (Spaltenvektor) [1; 0]
t Zeitpunkte (Spaltenvektor)
y Lösungsmatrix: eine Spalte pro Variable y(:,1) = xx, y(:,2) = vv
Numerik – D. Straub

Federschwinger mit ode45

f = @(t, z) [z(2); -z(1)];   % z = [x; v]

[t, y] = ode45(f, [0, 20], [1; 0]);

plot(t, y(:,1), 'b', t, y(:,2), 'r')
legend('x(t)', 'v(t)')
xlabel('t'),  grid on

y(:,1) enthält x(t)x(t), y(:,2) enthält v(t)v(t) – eine Zeile pro Zeitpunkt.

Numerik – D. Straub

✍️ Aufgabe: Schwingung mit ode45

Lösen Sie die gedämpfte Schwingung aus der vorherigen Aufgabe numerisch:

mx¨+dx˙+kx=F0cos(ωt),x(0)=0,x˙(0)=1m\ddot{x} + d\,\dot{x} + k\,x = F_0\cos(\omega t), \qquad x(0) = 0,\quad \dot{x}(0) = 1

mit m=1m = 1, d=0,2d = 0{,}2, k=4k = 4, F0=1F_0 = 1, ω=2\omega = 2.

  1. Schreiben Sie die Funktion f(t, z) in MATLAB
  2. Lösen Sie mit ode45 für t[0,30]t \in [0, 30]
  3. Plotten Sie x(t)x(t) und v(t)v(t)

Was beobachten Sie im Langzeitverhalten?

Numerik – D. Straub